package com.kexio.auth.mybatis;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;

import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration;
import com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties;
import com.baomidou.mybatisplus.autoconfigure.MybatisPlusPropertiesCustomizer;

/**
 * MyBatis Mapper XML 自动配置
 * 
 * <p>解决 Spring Boot 3 多模块项目中 Mapper XML 加载问题
 * <p>通过 MybatisPlusPropertiesCustomizer 显式配置 Mapper 位置
 * 
 * @author Kexio Team
 */
@AutoConfiguration(before = MybatisPlusAutoConfiguration.class)
@ConditionalOnClass(MybatisPlusProperties.class)
public class MybatisMapperAutoConfiguration {

    /**
     * 自定义 MyBatis-Plus 属性配置
     * 
     * <p>强制扫描所有 JAR 包中的 Mapper XML 文件
     */
    @Bean
    public MybatisPlusPropertiesCustomizer mybatisPlusPropertiesCustomizer() {
        return properties -> {
            // 显式扫描所有 JAR 包中的 mapper XML 文件
            ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
            List<Resource> resources = new ArrayList<>();
            
            try {
                // 扫描所有模块的 mapper 目录
                Resource[] mapperResources = resolver.getResources("classpath*:mapper/**/*.xml");
                resources.addAll(Arrays.asList(mapperResources));
                
//                System.out.println("========================================");
//                System.out.println("📋 MyBatis Mapper XML 扫描结果：");
//                System.out.println("========================================");
//                for (Resource resource : resources) {
//                    if (resource.exists() && resource.isReadable()) {
//                        System.out.println("✅ " + resource.getFilename());
//                    }
//                }
//                System.out.println("========================================");
//                System.out.println("📊 共发现 " + resources.size() + " 个 Mapper XML 文件");
//                System.out.println("========================================");
                
                // 设置 Mapper 位置模式（使用 classpath*: 扫描所有 JAR 包）
                properties.setMapperLocations(new String[]{"classpath*:mapper/**/*.xml"});
                
            } catch (IOException e) {
                System.err.println("❌ 扫描 Mapper XML 文件失败：" + e.getMessage());
                e.printStackTrace();
            }
        };
    }
}

